package com.jsnkj.basic.burialpoint;

import android.app.Application;

import com.jsnkj.basic.BuildConfig;

import java.util.HashMap;
import java.util.Map;

import ly.count.android.sdk.Countly;
import ly.count.android.sdk.CountlyConfig;
import ly.count.android.sdk.DeviceId;

/**
 * 埋点工具类
 * 文档：https://support.count.ly/hc/en-us/articles/360037754031-Android
 */
public class BurialPointUtil {


    public static void init(Application application, String appDataToolsVersion, String buildTime, String applicationId, String versionName,String appChannelName, String appkey) {
        CountlyConfig config = new CountlyConfig(application, appkey, "http://c.baiyiadsense.com/");
        config.setLoggingEnabled(BuildConfig.DEBUG);
        config.setIdMode(DeviceId.Type.ADVERTISING_ID);

        //自动崩溃处理
        config.enableCrashReporting();

        config.setViewTracking(true);
        //设置视图事件 自定义字段
        Map<String, Object> automaticViewSegmentation = new HashMap<>();
        automaticViewSegmentation.put("appDataToolsVersion", appDataToolsVersion);
        automaticViewSegmentation.put("buildTime", buildTime);
        automaticViewSegmentation.put("applicationId", applicationId);
        automaticViewSegmentation.put("versionName", versionName);
        automaticViewSegmentation.put("appChannelName", appChannelName);
        config.setAutomaticViewSegmentation(automaticViewSegmentation);

        //v自动视图跟踪
        config.setAutoTrackingUseShortName(true);

        Countly.sharedInstance().init(config);
    }


    /**
     * 启动app事件
     * normal(正常启动)，excption（异常重启）
     */
    public static void startAppEvent(String event) {
        addEvent("start_app", "start_type", event);
    }


    /**
     * 登录事件
     * normal（注册登录）、auto（自动一键）、mobile（手机验证码登录）、mobile_auto(电话号码一键登录)、socical_wx（微信登录）、socical_qq（qq登录）
     */
    public static void loginEvent(String event) {
        addEvent("login", "login_type", event);
    }

    /**
     * 广告初始化请求事件
     * load(请求)、show（成功加载）、fail（请求失败）
     */
    public static void initAdEvent(String event) {
        addEvent("init_ad", "init_ad_type", event);
    }



    /**
     * 开屏广告请求事件
     * load(请求)、show（成功加载）、fail（请求失败）
     */
    public static void splashAdEvent(String event) {
        addEvent("splash_ad", "splash_ad_type", event);
    }


    /**
     * 信息流广告请求事件
     * load(请求)、show（成功加载）、fail（请求失败）
     */
    public static void flowAdEvent(String event) {
        addEvent("flow_ad", "flow_ad_type", event);
    }

    /**
     * 插屏请求事件
     * load(请求)、show（成功加载）、fail（请求失败）
     */
    public static void cpAdEvent(String event) {
        addEvent("cp_ad", "cp_ad_type", event);
    }

    /**
     * Banner请求事件
     * load(请求)、show（成功加载）、fail（请求失败）
     */
    public static void bannerAdEvent(String event) {
        addEvent("banner_ad", "banner_ad_type", event);
    }

    /**
     * 短视频请求事件
     * load(请求)、show（成功加载）、fail（请求失败）
     */
    public static void shortVideoAdEvent(String event) {
        addEvent("short_video_ad", "short_video_ad_type", event);
    }


    /**
     * 播放前激励视屏请求事件
     * load(请求)、show（成功加载）、fail（请求失败）
     */
    public static void playJlspAdEvent(String event) {
        addEvent("jlsp_ad", "jlsp_ad_type", event);
    }



    /**
     * 分享事件
     *
     * @param userAction ：open（进入界面，页面打开就算）
     * @param inType     ：（进入方式）分为：player_bottom_btn(视频详情页下面进)、ucenter（个人中心进）、main（分享主页进）、player_no_ad_btn(推广免广告按钮进)
     * @param shareType  ：(分享方式)分为：link（链接分享）、haibao（海报分享）
     */
    public static void phbEvent(Integer userAction, String inType, String shareType) {
        HashMap<String, Object> segmentation = new HashMap<>();
        segmentation.put("user_action", userAction);
        segmentation.put("in_type", inType);
        segmentation.put("share_type", shareType);
        addEvent("phb", segmentation);
    }

    /**
     * 构建版本事件
     *
     * @param event :比如2024_04_09_001，2024_04_01_001
     */
    public static void buildEvent(String event) {
        addEvent("build", "app_data_tools_version", event);
    }

    /**
     * 添加埋点事件
     *
     * @param event
     */
    public static void addEvent(String key, String keyType, String event) {
        HashMap<String, Object> segmentation = new HashMap<>();
        segmentation.put(keyType, event);
        addEvent(key, segmentation);
    }


    /**
     * 添加埋点事件
     */
    public static void addEvent(String key, HashMap<String, Object> segmentation) {
        Countly.sharedInstance().events().recordEvent(key, segmentation);
    }


    /**
     * 异常事件
     */
    public static void exceptionEvent(Throwable exception) {
        Countly.sharedInstance().crashes().recordHandledException(exception);
    }


    /**
     * 异常事件
     */
    public static void exceptionEvent11(Exception exception) {
        Countly.sharedInstance().crashes().recordHandledException(exception);
        Countly.sharedInstance().sessions().beginSession();
    }
}
